// pages/search/search.js
const app = getApp()
const { searchHistory, userPreferences } = require('../../utils/storage.js')
const { handleError, checkNetworkStatus } = require('../../utils/network.js')

Page({
  data: {
    searchType: 'code', // 'code' 或 'goods'
    searchKeyword: '',
    loading: false,
    searchHistory: []
  },

  onLoad(options) {
    // 页面加载时执行
    this.loadSearchHistory()

    // 如果从首页传递了搜索类型，则设置默认类型
    if (options.type) {
      this.setData({
        searchType: options.type
      })
    } else {
      // 使用用户偏好的默认搜索类型
      const defaultType = userPreferences.getValue('defaultSearchType', 'code')
      this.setData({
        searchType: defaultType
      })
    }
  },

  onShow() {
    // 页面显示时执行
  },

  // 选择搜索类型
  selectSearchType(e) {
    const type = e.currentTarget.dataset.type
    this.setData({
      searchType: type,
      searchKeyword: '' // 切换类型时清空输入
    })
  },

  // 输入框内容变化
  onInputChange(e) {
    this.setData({
      searchKeyword: e.detail.value.trim()
    })
  },

  // 执行搜索
  async onSearch() {
    const { searchType, searchKeyword } = this.data

    if (!searchKeyword) {
      wx.showToast({
        title: '请输入搜索内容',
        icon: 'none'
      })
      return
    }

    // 券码搜索验证
    if (searchType === 'code') {
      if (!/^\d{6}$/.test(searchKeyword)) {
        wx.showToast({
          title: '券码必须是6位数字',
          icon: 'none'
        })
        return
      }
    }

    // 检查网络状态
    try {
      await checkNetworkStatus()
    } catch (error) {
      handleError(error)
      return
    }

    this.setData({ loading: true })

    // 保存搜索历史
    this.saveSearchHistory(searchKeyword, searchType)

    // 根据搜索类型调用不同的API
    if (searchType === 'code') {
      this.searchByCode(searchKeyword)
    } else {
      this.searchByGoods(searchKeyword)
    }
  },

  // 根据券码搜索
  searchByCode(ticketCode) {
    console.log('开始券码搜索:', ticketCode)
    console.log('请求URL:', `${app.globalData.baseUrl}/qdd/ticket/search/code/${ticketCode}`)

    wx.request({
      url: `${app.globalData.baseUrl}/qdd/ticket/detail/code/${ticketCode}`,
      method: 'GET',
      success: (res) => {
        console.log('券码搜索响应:', res)
        this.setData({ loading: false })

        if (res.statusCode === 200 && res.data.code === 200) {
          console.log('搜索成功，数据:', res.data.data)
          if (res.data.data) {
            // 找到券，跳转到搜索结果页（保持一致的用户体验）
            const tickets = [res.data.data] // 将单个券包装成数组
            console.log('准备跳转到搜索结果页，tickets:', tickets)

            wx.navigateTo({
              url: `/pages/search-result/search-result?keyword=${encodeURIComponent(ticketCode)}&type=code&tickets=${encodeURIComponent(JSON.stringify(tickets))}&total=1`,
              success: () => {
                console.log('页面跳转成功')
              },
              fail: (err) => {
                console.error('页面跳转失败:', err)
                wx.showToast({
                  title: '页面跳转失败',
                  icon: 'none'
                })
              }
            })
          } else {
            console.log('未找到券码数据')
            wx.showToast({
              title: '未找到该券码',
              icon: 'none'
            })
          }
        } else {
          console.log('搜索失败，响应码:', res.statusCode, '错误信息:', res.data)
          wx.showToast({
            title: res.data.msg || '搜索失败',
            icon: 'none'
          })
        }
      },
      fail: (err) => {
        console.error('网络请求失败:', err)
        this.setData({ loading: false })
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        })
      }
    })
  },

  // 根据商品名称搜索
  searchByGoods(goodsName) {
    console.log('开始商品搜索:', goodsName)
    console.log('请求URL:', `${app.globalData.baseUrl}/qdd/ticket/detail/goods`)

    wx.request({
      url: `${app.globalData.baseUrl}/qdd/ticket/detail/goods`,
      method: 'GET',
      data: {
        goodsName: goodsName,
        page: 1,
        limit: 20
      },
      success: (res) => {
        console.log('商品搜索响应:', res)
        this.setData({ loading: false })

        if (res.statusCode === 200 && res.data.code === 200) {
          const tickets = res.data.data.list || []
          console.log('搜索到的优惠券:', tickets)

          if (tickets.length > 0) {
            // 找到券，跳转到搜索结果页
            console.log('准备跳转到搜索结果页，总数:', res.data.data.total)

            wx.navigateTo({
              url: `/pages/search-result/search-result?keyword=${encodeURIComponent(goodsName)}&type=goods&tickets=${encodeURIComponent(JSON.stringify(tickets))}&total=${res.data.data.total}`,
              success: () => {
                console.log('页面跳转成功')
              },
              fail: (err) => {
                console.error('页面跳转失败:', err)
                wx.showToast({
                  title: '页面跳转失败',
                  icon: 'none'
                })
              }
            })
          } else {
            console.log('未找到相关优惠券')
            wx.showToast({
              title: '未找到相关优惠券',
              icon: 'none'
            })
          }
        } else {
          console.log('搜索失败，响应码:', res.statusCode, '错误信息:', res.data)
          wx.showToast({
            title: res.data.msg || '搜索失败',
            icon: 'none'
          })
        }
      },
      fail: (err) => {
        console.error('网络请求失败:', err)
        this.setData({ loading: false })
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        })
      }
    })
  },

  // 保存搜索历史
  saveSearchHistory(keyword, type) {
    if (userPreferences.getValue('autoSave', true)) {
      const history = searchHistory.add(keyword, type)
      this.setData({ searchHistory: history })
    }
  },

  // 加载搜索历史
  loadSearchHistory() {
    const history = searchHistory.get()
    this.setData({ searchHistory: history })
  },

  // 点击历史记录
  onHistoryItemTap(e) {
    const { keyword, type } = e.currentTarget.dataset
    this.setData({
      searchType: type,
      searchKeyword: keyword
    })
  },

  // 清空搜索历史
  clearHistory() {
    wx.showModal({
      title: '确认清空',
      content: '确定要清空所有搜索历史吗？',
      success: (res) => {
        if (res.confirm) {
          searchHistory.clear()
          this.setData({ searchHistory: [] })
          wx.showToast({
            title: '已清空',
            icon: 'success'
          })
        }
      }
    })
  },

  // 跳转到设置页面
  goToSettings() {
    wx.navigateTo({
      url: '/pages/settings/settings'
    })
  },

  // 格式化时间
  formatTime(date) {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    const hour = date.getHours()
    const minute = date.getMinutes()

    return `${month}-${day} ${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`
  }
})
